% TODO sync with English version
\chapter{Herramientas}

\section{Desensamblador}

\subsection{IDA}

\label{IDA}
Una versi\'on freeware anterior est\'a disponible para descargar
\footnote{\href{http://go.yurichev.com/17031}{hex-rays.com/products/ida/support/download\_freeware.shtml}}.

\ShortHotKeyCheatsheet: \myref{sec:IDA_cheatsheet}

\section{Depurador}

\subsection{\olly}
\myindex{\olly}

Un depurador muy popular para win32 en modo usuario: \href{http://go.yurichev.com/17032}{ollydbg.de}.

\ShortHotKeyCheatsheet: \myref{sec:Olly_cheatsheet}

\subsection{GDB}
\myindex{GDB}

No es muy popular entre reversers, aunqu es muy c\'omoda. % even though there's a direct translation for 'reverse engineer', the word commonly used is 'reverser' 

Algunos comandos: \myref{sec:GDB_cheatsheet}.

\subsection{tracer}

\myindex{tracer}
\label{tracer}
El autor suele utilizar \IT{tracer}
\footnote{\href{http://go.yurichev.com/17338}{yurichev.com}} english link
(recurso en ingl\'es) en vez de un depurador.% we explicitly say that the link is for the english version

El autor de estas l\'ineas eventualmente dej\'o de utilizar un depurador, ya que lo \'unico que necesita es hallar los argumentos
de las funciones durante la ejecuci\'on, o el estado de los registros en alg\'un punto.
Cargar un depurador en cada ocasi\'on es demasiado, y fue as\'i como naci\'o una utiler\'ia llamada \IT{tracer}.
Funciona a trav\'es de la l\'inea de comandos, permitiendo interceptar la ejecuc\'on de una funci\'on,
colocar breakpoints en lugares arbitrarios, leer y cambiar el estado de los registros, etc.

Sin embargo, con fines de aprendizaje es altamente recomendable trazar el c\'odigo manualmente en un depurador,
observar c\'omo cambia el estado de los registros (e.g. los cl\'asicos SoftICE, OllyDbg, WinDbg subrayan los registros modificado),
de las banderas, de los datos, modificarlos, observar la reacci\'on, etc.

\section{Trazado de llamadas al sistema}

\label{strace}
\myindex{strace}
\myindex{dtruss}
\subsubsection{strace / dtruss}

\myindex{syscall}
Muestra cu\'ales llamadas al sistema (llamadas al sistema(\myref{syscalls})) son llamadas por un proceso en este momento.

Por ejemplo:

\begin{lstlisting}
# strace df -h

...

access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/i386-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\220\232\1\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1770984, ...}) = 0
mmap2(NULL, 1780508, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb75b3000
\end{lstlisting}

\myindex{\MacOSX}
\RU{В \MacOSX для этого же имеется dtruss.}%
\EN{\MacOSX has dtruss for doing the same.}%
\ES{\MacOSX tiene dtruss para hacer lo mismo.}%
\PTBRph{}%
\DEph{}\PLph{}%
\ITAph{}

\myindex{Cygwin}
Cygwin tambi\'en tiene strace, para hasta donde se sabe, s\'olo trabaja con archivos .exe
compilados para el mismo ambiente cygwin.

\section{Decompiladores}

Existe un solo decompilador a c\'odigo C de alta calidad y disponible p\'ublicamente: Hex-Rays:
\href{http://go.yurichev.com/17033}{hex-rays.com/products/decompiler/}

% TBT

% TODO Java, .NET, VB, etc

\section{Otras herramientas}

\begin{itemize}
\item
Microsoft Visual Studio Express\footnote{\href{http://go.yurichev.com/17034}{visualstudio.com/en-US/products/visual-studio-express-vs}}:
La versi\'on m\'inima y gratuita de Visual Studio, conveniente para experimentos sencillos.
Algunas opciones \'utiles: \myref{sec:MSVC_options}.

\item
\label{Hiew}
Hiew\footnote{\href{http://go.yurichev.com/17035}{hiew.ru}}:
para realizar modificaciones de c\'odigo peque\~nas en archivos binarios.
	
\item
\myindex{binary grep}
binary grep: 
una peque\~na utiler\'ia para buscar cualquier secuencia de bytes en un mont\'on de archivos, 
incluyendo archivos no ejecutables: \BGREPURL.
% TBT
\end{itemize}

% TBT

